﻿using System;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BDSUETableAdapters;

/// <summary>
/// Descripcion para GestionarPracticantes
/// </summary>
public class GestionarPracticantes
{   
    /// <summary>
    ///Constructor de la clase Gestionar Practicante.
    /// </summary>
	public GestionarPracticantes()
	{ 
		//
		// TODO: Add constructor logic here
		//
	}
    
    /// <summary>
    /// Permite obtener un Practicante especifico, llamando una consulta que se encuentra en el archivo BDSUE.xsd
    /// para buscar por clave primaria al usuario solicitado.
    /// </summary>
    /// <param name="nombreUsuario">Identificador String (String) con el que se encuentra guardado en la base de datos un usuario.</param>
    /// <returns>Retorna la información del usuario que a sido seleccionado en la busqueda.</returns>
    public DataRow ObtPractEspecifico(String nombreUsuario)
    {
        
        PracticanteTableAdapter pTA = new PracticanteTableAdapter();
        DataTable res = pTA.GetDataByNombreUsuario(nombreUsuario);
        if (res.Rows.Count > 0)
            return res.Rows[0];
        return null;
   
    }

    /// <summary>
    /// Funcion para modificar la información de un practicante y usuario, teniendo en cuenta que la información de practicante
    /// es complemento de la información de usuario.
    /// </summary>
    /// <param name="string nombreUsuario, string contrasena, string email, string nombre, string apellido, string telefonoFijo, string telefonoCelular,String direccionActual, String telefonoHogar, String direccionHogar, String municipioHogar, String departamentoHogar, String telefonoFamiliar, String nombreFamiliar, String estado, String ProgramaAcademico_nombreProgramaAcademico,String codigo, String cedula">
    /// Cada uno d elos parametros son los campos en la base de datos usuario y practicante.</param>
    /// <returns>Retorna la información del Practicante actualizada en la base de datos.</returns>
    ///<remarks>Recuerde utilizar esta funcion solo cuando necesite modificar toda la información referente al Practicante</remarks>  
    public void ModPracticante(string nombreUsuario, string contrasena, string email, string nombre, string apellido, string telefonoFijo, string telefonoCelular,String direccionActual, String telefonoHogar, String direccionHogar, String municipioHogar, String departamentoHogar, String telefonoFamiliar, String nombreFamiliar, String estado, String ProgramaAcademico_nombreProgramaAcademico,String codigo, String cedula)
    
    {
        Usuario nuevoUsuario = new Usuario(nombreUsuario, contrasena, email,nombre, apellido,telefonoFijo ,telefonoCelular,"practicante");//cargo los obtener en el usuario creado
        nuevoUsuario.ActualizarUsuario();//actualizo la informacion de usuario

        PracticanteTableAdapter pTA = new PracticanteTableAdapter();
        pTA.ActualizarPracticante(nombreUsuario, direccionActual, telefonoHogar, direccionHogar, municipioHogar, departamentoHogar, telefonoFamiliar, nombreFamiliar, estado, ProgramaAcademico_nombreProgramaAcademico,codigo,cedula,nombreUsuario);
    }

    /// <summary>
    /// Funcion para obtener la lista de todos los practicantes registrados en el sistema
    /// </summary>
    /// <param name="">
    /// No entran parametros porque hace una busqueda general en la base de datos llamando la funcion GetDataByPracticanteCompleto() que se encuentra en el BDSUE.xsd
    /// <returns>Retorna en una DataTable la información de todos los Practicantes registrados en la base de datos.</returns>
    ///<remarks>Recuerde utilizar esta funcion solo cuando necesite toda la información referente a los Practicantes registrados en el sistema</remarks>  
    public DataTable ObtPracticantes() 
    {
        PracticanteTableAdapter pTA = new PracticanteTableAdapter();
        return pTA.GetDataByPracticanteCompleto();
    }

    /// <summary>
    /// Funcion para crear un practicante en el sistema
    /// es complemento de la información de usuario.
    /// </summary>
    /// <param name="">
    /// si el usuario no existe se crea un nuevo usuario</param>
    /// <returns>Crea un usuario en el sistema y lo registra en la base de datos.</returns>
    public void CrearPracticantes(string nombreUsuario, string contrasena, string email, string nombre, string apellido,String telefonoFijo, String telefonoCelular,String rol ,String direccionActual, String telefonoHogar, String direccionHogar, String municipioHogar, String departamentoHogar, String telefonoFamiliar, String nombreFamiliar, String estado, String ProgramaAcademico_nombreProgramaAcademico,String codigo,String cedula) 
    {
        Usuario usu = new Usuario();
        usu = usu.BuscarUsuario(nombreUsuario);//busco el usuario por el nombre
        if (usu == null)
        {
            Usuario nuevoUsuario = new Usuario(nombreUsuario, contrasena, email, nombre, apellido, telefonoFijo,telefonoCelular,rol);//cargo los obtener en el usuario creado
            nuevoUsuario.CrearUsuario();         
            PracticanteTableAdapter pTA = new PracticanteTableAdapter();
            
            pTA.InsertPracticante(nombreUsuario, direccionActual, direccionHogar, telefonoHogar, municipioHogar, departamentoHogar, telefonoFamiliar, nombreFamiliar,estado,ProgramaAcademico_nombreProgramaAcademico,codigo,cedula);
        }
    }

    public DataTable BusquedaAvanzada(string NomPracticante, string ApePracticante, string codigoPracticante, string estadoPracticante, string programaAcademico)
    {
        List<string> criterios = new List<string>();

        if (NomPracticante != string.Empty)
            criterios.Add("nombre like '%" + NomPracticante + "%'");

        if (ApePracticante != string.Empty)
            criterios.Add("apellido like '%" + ApePracticante + "%'");

        if (codigoPracticante != string.Empty)
            criterios.Add("codigo like '%" + codigoPracticante + "%'");

        if (estadoPracticante != "ninguno" && estadoPracticante != string.Empty)
            criterios.Add("estado = '" + estadoPracticante + "'");

        if (programaAcademico != "ninguno" && programaAcademico != string.Empty)
            criterios.Add("ProgramaAcademico_nombreProgramaAcademico = '" + programaAcademico + "'");

        string filtro = string.Join(" AND ", criterios.ToArray());

        PracticanteTableAdapter pTA = new PracticanteTableAdapter();

        DataTable todos = pTA.GetDataByPracticanteCompleto();
        DataRow[] dtrow = todos.Select(filtro);
        DataTable resultado = new DataTable();
        resultado = todos.Clone();
        foreach (DataRow dtr in dtrow)
            resultado.ImportRow(dtr);
        return resultado;
    }

    public DataTable ObtPracticantesPorEstado(String estado) 
    {
        PracticanteTableAdapter pTA = new PracticanteTableAdapter();
        return pTA.GetDataByEstadoPracticantes(estado);
    }
    public DataTable ObtPracticantesInfoCompleta() 
    {
        PracticanteTableAdapter ptA = new PracticanteTableAdapter();
        return ptA.GetDataByPracticanteCompleto();
    }
 }
